package com.luoshizhen.lease.common.sms;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(AliyunSMSProperties.class)
@ConditionalOnProperty(name = "aliyun.sms.endpoint")
public class AliyunSMSConfiguration {

    @Autowired
    private AliyunSMSProperties properties;

    /**
     * 创建并配置Client实例
     *
     * 该方法通过读取配置属性，创建一个配置了访问凭证和终点的Client实例
     * 主要作用是进行依赖注入，使得其他组件可以无缝使用Client实例
     *
     * @return Client实例，已配置好访问凭证和终点
     * @throws RuntimeException 如果Client实例创建失败，则抛出运行时异常
     */
    @Bean
    public Client createClient() {
        // 创建配置实例
        Config config = new Config();

        // 设置访问密钥ID
        config.setAccessKeyId(properties.getAccessKeyId());
        // 设置访问密钥秘密
        config.setAccessKeySecret(properties.getAccessKeySecret());
        // 设置服务终点
        config.setEndpoint(properties.getEndpoint());

        // 尝试创建Client实例
        try {
            return new Client(config);
        } catch (Exception e) {
            // 如果创建失败，抛出运行时异常
            throw new RuntimeException(e);
        }
    }
}